home *** CD-ROM | disk | FTP | other *** search
/ io Programmo 37 / IOPROG_37.ISO / SOFT / Multilizer.exe / disk1 / data1.cab / data1 / [Group9]VCL Source Standard / ivusrdic.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1999-08-12  |  4.9 KB  |  158 lines

  1. unit IvUsrDic;
  2.  
  3. interface
  4.  
  5. uses
  6.   Classes,
  7.   IvDictio;
  8.  
  9. type
  10.   TIvUserDictionary = class;
  11.  
  12.   TIvCountEvent = function(sender: TIvUserDictionary): Integer of object;
  13.  
  14.   TIvLanguageEvent = procedure(
  15.     sender: TIvUserDictionary;
  16.     index: Integer;
  17.     language: TIvLanguage) of object;
  18.  
  19.   TIvLocaleEvent = procedure(
  20.     sender: TIvUserDictionary;
  21.     index: Integer;
  22.     locale: TIvLocale) of object;
  23.  
  24.   TIvTranslateEvent = function(
  25.     sender: TIvUserDictionary;
  26.     const str: String;
  27.     var translation: String): Boolean of object;
  28.  
  29.   TIvTranslateContextEvent = function(
  30.     sender: TIvUserDictionary;
  31.     const str, form, component: String;
  32.     var translation: String): Boolean of object;
  33.  
  34.   TIvUserDictionary = class(TIvDictionary)
  35.   private
  36.     FOnLanguageCount: TIvCountEvent;
  37.     FOnLanguageData: TIvLanguageEvent;
  38.     FOnLocaleCount: TIvCountEvent;
  39.     FOnLocaleData: TIvLocaleEvent;
  40.     FOnTranslate: TIvTranslateEvent;
  41.     FOnTranslateContext: TIvTranslateContextEvent;
  42.  
  43.   protected
  44.     function GetLanguageCount: Integer; override;
  45.     procedure GetLanguageData(index: Integer; language: TIvLanguage); override;
  46.     function GetLocaleCount: Integer; override;
  47.     procedure GetLocaleData(index: Integer; locale: TIvLocale); override;
  48.  
  49.   public
  50.     function TranslateString(
  51.       const str: String;
  52.       var translation: String): Boolean; override;
  53.     function TranslateContextString(
  54.       const str, form, component: String;
  55.       var translation: String): Boolean; override;
  56.  
  57.   published
  58.      property OnLanguageCount: TIvCountEvent read FOnLanguageCount write FOnLanguageCount;
  59.      property OnLanguageData: TIvLanguageEvent read FOnLanguageData write FOnLanguageData;
  60.      property OnLocaleCount: TIvCountEvent read FOnLocaleCount write FOnLocaleCount;
  61.      property OnLocaleData: TIvLocaleEvent read FOnLocaleData write FOnLocaleData;
  62.      property OnTranslate: TIvTranslateEvent read FOnTranslate write FOnTranslate;
  63.      property OnTranslateContext: TIvTranslateContextEvent read FOnTranslateContext write FOnTranslateContext;
  64.   end;
  65.  
  66. implementation
  67.  
  68. uses
  69.   SysUtils;
  70.  
  71. function TIvUserDictionary.GetLanguageCount: Integer;
  72. begin
  73.   { Call OnLanguageCount event and let the event handler to return the language count }
  74.  
  75.   if Assigned(FOnLanguageCount) then
  76.     Result := FOnLanguageCount(Self)
  77.   else if IsDesignTime then
  78.     Result := 0
  79.   else
  80.     raise Exception.Create('Undefined OnLanguageCount event');
  81. end;
  82.  
  83. procedure TIvUserDictionary.GetLanguageData(index: Integer; language: TIvLanguage);
  84. begin
  85.   { Call OnLanguageData event and let the event handler to return the language data }
  86.  
  87.   if Assigned(FOnLanguageData) then
  88.   begin
  89.     { Creates the language object, calls the event handler to fill it up and
  90.       finally checks that all the required properties were set. }
  91.  
  92.     FOnLanguageData(Self, index, language);
  93.     language.Init;
  94.     if (language.Primary = 0) or
  95.       (language.EnglishName = '') or (language.NativeName = '')
  96.     then
  97.       raise Exception.Create('Incomplete language data (' + IntToStr(index) + ')');
  98.   end
  99.   else
  100.     raise Exception.Create('Undefined OnLanguageData event');
  101. end;
  102.  
  103. function TIvUserDictionary.GetLocaleCount: Integer;
  104. begin
  105.   { Call OnLocaleCount event and let the event handler to return the language count }
  106.  
  107.   if Assigned(FOnLocaleCount) then
  108.     Result := FOnLocaleCount(Self)
  109.   else if IsDesignTime then
  110.     Result := 0
  111.   else
  112.     raise Exception.Create('Undefined OnLocaleCount event');
  113. end;
  114.  
  115. procedure TIvUserDictionary.GetLocaleData(index: Integer; locale: TIvLocale);
  116. begin
  117.   { Call OnLocaleData event and let the event handler to return the locale data }
  118.  
  119.   if Assigned(FOnLocaleData) then
  120.   begin
  121.     FOnLocaleData(Self, index, locale);
  122.     locale.Init;
  123.     if (locale.Primary = 0) or (locale.Sub = 0) or
  124.       (locale.EnglishLanguageName = '') or (locale.NativeLanguageName = '') or
  125.       (locale.EnglishCountryName = '') or (locale.NativeCountryName = '')
  126.     then
  127.       raise Exception.Create('Incomplete locale data (' + IntToStr(index) + ')');
  128.   end
  129.   else
  130.     raise Exception.Create('Undefined OnLocaleData event');
  131. end;
  132.  
  133. function TIvUserDictionary.TranslateString(
  134.   const str: String;
  135.   var translation: String): Boolean;
  136. begin
  137.   { Call OnTranslate event and let the event handler to translate the text }
  138.  
  139.   if Assigned(FOnTranslate) then
  140.     Result := FOnTranslate(Self, str, translation)
  141.   else
  142.     raise Exception.Create('Undefined OnTranslate event');
  143. end;
  144.  
  145. function TIvUserDictionary.TranslateContextString(
  146.   const str, form, component: String;
  147.   var translation: String): Boolean;
  148. begin
  149.   { Call OnTranslate event and let the event handler to translate the text }
  150.  
  151.   if Assigned(FOnTranslateContext) then
  152.     Result := FOnTranslateContext(Self, str, form, component, translation)
  153.   else
  154.     raise Exception.Create('Undefined OnTranslate event');
  155. end;
  156.  
  157. end.
  158.